import express from 'express';
import cors from 'cors';
import OpenAI from "openai";

const app = express();
// 显式配置允许的源，解决跨域问题
app.use(cors({
  origin: 'http://localhost:81', // 你的前端开发地址
  methods: ['GET', 'POST'],
  allowedHeaders: ['Content-Type'],
  credentials: true
}));

app.use(express.json());

const openai = new OpenAI({
  baseURL: 'https://api.deepseek.com',
  // apiKey: process.env.DEEPSEEK_API_KEY // 通过环境变量管理密钥
  apiKey: 'sk-d37ca16ec67d4845aafbf3bf06358b8a'
});


app.get('/chat/postChat', async (req, res) => {
  try {
    // 设置响应头为 SSE 格式
    res.setHeader('Content-Type', 'text/event-stream');
    res.setHeader('Cache-Control', 'no-cache');
    res.setHeader('Connection', 'keep-alive');
    res.flushHeaders(); // 确保立即发送响应头

    const completion = await openai.chat.completions.create({
      messages: [
        { role: "system", content: req.query.message },
      ],
      model: "deepseek-chat",
      stream: true,
      prefix_completion: true
    });
    let result = '';
    for await (const chunk of completion) {
      const content = chunk.choices[0]?.delta?.content || '';
      result += content
      console.log("持续回答", content)
      res.write(`data: ${JSON.stringify({ content })}\n\n`);
    }
    console.log("全部答案", result)
    // 5. 正常结束
    res.write('event: end\ndata: {}\n\n');
    res.end(); // 结束EventStream响应
  } catch (error) {
    console.error('API调用失败:', error);
    res.status(503).json({ error: error.message });
  }
});


const PORT = 3001;
app.listen(PORT, () => {
  console.log(`服务端运行在 http://localhost:${PORT}`);
});

// app.post('/chat/postChatOld', async (req, res) => {
//   try {
//     const completion = await openai.chat.completions.create({
//       messages: req.body.messages,
//       // model: "deepseek-reasoner",
//       model: "deepseek-chat",

//       // messages: [{ role: "system", content: "你是怎么看待吸引力法则的？这是伪科学吗？给出详细证明，然后给出所有的显化的方式，至少六种，详细易懂的介绍操作步骤，给出贴切操作案例" }],
//       // model: "deepseek-chat",
//       prefix_completion: true
//     });
    
//     const message = completion.choices[0].message.content;
    
//     console.log("回答结果-------------:", message)
//     // 将AI的对话内容分批发送
//     for (let i = 0; i < message.length; i++) {
//       // 每个字符单独发送，模拟逐字显示
//       res.write(`data: ${message[i]}\n\n`);
//       console.log("响应写入内容", message[i])
//       await new Promise(resolve => setTimeout(resolve, 100)); // 延迟发送
//     }

//     res.write('data: [END]\n\n'); // 发送结束标志
//     res.end(); // 结束EventStream响应
//   } catch (error) {
//     console.error('API调用失败:', error);
//     res.status(503).json({ error: error.message });
//   }
// });

